# coforms Tech
[documentation](~d/modules/costum/views/tpls/forms/README.md]
[schema](https://docs.google.com/presentation/d/1jwi3pYEzL_r8IH1AEpzlJe4jTt2kG7BZS5Hyq1kZHeE/edit#slide=id.p)
# json
[[~d/modules/costum/data/freeform.json]]
[[~d/modules/costum/data/forms/openForm.json]]
# templates : can be used anywhere in any costumForm
[[~d/modules/costum/views/custom/co/freeform.php]]
[[~d/modules/costum/views/custom/co/formSection.php]]
[[~d/modules/costum/views/custom/co/formbuilder.php]]
** basic form tpls
[[~d/modules/costum/views/tpls/forms/text.php]]
[[~d/modules/costum/views/tpls/forms/select.php]]
[[~d/modules/costum/views/tpls/forms/textarea.php]]
[[~d/modules/costum/views/tpls/forms/checkbox.php]]
** complexe tpls forms
[[~d/modules/costum/views/tpls/forms/calendar.php]]
[[~d/modules/costum/views/custom/co/answerList.php]]
# OPEN FORM WITH WIZARD
[[~d/modules/costum/views/custom/co/formWizard.php]]
[[~d/modules/costum/views/tpls/forms/wizard.php]]
[[~d/modules/costum/views/custom/co/formSection.php]]
[[~d/modules/costum/views/custom/co/formbuilder.php]]
# TECHNICALLY , ARCHITECTURE
## parent Forms and subForms
### PARENT FORM
are the master piece of a coform session
it presents and holds
- the parent Context
- the list of subForms
- possible parameters
-
```
{
"_id" : ObjectId("5f3e5d62275640c499c2e11a"),
"id" : "ctenatForm",
"parent" : {
"5ca1b2bb40bb4e9352ba351b" : {
"type" : "organizations",
"name" : "CTE National"
}
},
"homeTpl" : "survey.views.custom.ctenat.explainRow",
"subForms" : [
"action",
"caracter",
"murir",
"contractualiser",
"suivre"
],
"source" : {
"key" : "ctenat",
"keys" : [
"ctenat"
],
"insertOrign" : "costum"
},
"active" : true,
"params" : {
"period" : {
"from" : 2018,
"to" : 2023
},
"elementelement1" : {
"type" : "organizations",
"limit" : ""
},
"elementelement3" : {
"type" : "projects",
"limit" : ""
},
"elementporteur" : {
"type" : "organizations",
"limit" : ""
},
"elementprojet" : {
"type" : "projects",
"limit" : ""
},
"elementaction" : {
"type" : "projects",
"limit" : ""
},
"elementparents" : {
"type" : "organizations",
"limit" : ""
},
"elementproject" : {
"type" : "projects",
"limit" : ""
},
"calendaropenForm19" : {
"sectionTitles" : [
"1er
Sem
2023",
"2ème
Sem
2023"
],
"dateSections" : [
"01/01/2024"
]
},
"budgetbudget" : {
"nature" : {
"investissement" : "Investissement",
"fonctionnement" : "Fonctionnement"
},
"amounts" : {
"price" : "Montant",
"amount2019" : "2019 (euros HT)",
"amount2020" : "2020 (euros HT)",
"amount2021" : "2021 (euros HT)",
"amount2022" : "2022 (euros HT)",
"amount2023" : "2023 (euros HT)"
},
"estimate" : "true"
}
},
"updated" : NumberLong(1597679109),
"graph" : {
"budgetbudget_1" : {
"label" : "test",
"type" : "amount"
},
"budgetbudget_2" : {
"label" : "",
"type" : "poste"
}
}
}
```
### SUBFORM
## formTpl
is the definition of a form, saved inside db.forms
looks like this
```
"_id" : ObjectId("5e0d010dbf4d14b1f08dcaf7"),
"id" : "openForm1",
"type" : "openForm",
"name" : "just a form",
"inputs" : {
"element" : {
"label" : "L'auteur",
"placeholder" : "Auteur",
"type" : "tpls.pods.author",
"info" : "si tu ne sais pas ou tu vas, regarde d'ou tu viens"
},
"element1" : {
"label" : "Structure porteuse",
"type" : "tpls.forms.cplx.element",
"info" : "La simplicité est l'ultime sophistication Léonard de Vinci 1515"
},
"element2" : {
"label" : "Structures associées",
"type" : "tpls.forms.cplx.element",
"info" : "La simplicité est l'ultime sophistication Léonard de Vinci 1515"
},
...
```
## step rules
## explain Tpl
## rendering order
### OPEN FORM WITH WIZARD
[[~d/modules/costum/views/custom/co/formWizard.php]]
[[~d/modules/costum/views/tpls/forms/wizard.php]]
[[~d/modules/costum/views/custom/co/formSection.php]]
[[~d/modules/costum/views/custom/co/formbuilder.php]]
individual inputs ased on configs
## links activity (historic, answered, voted....)
## FORM PARAMS
### anyOnewithLinkCanAnswer
### canReadOtherAnswers
### startDate
### endDate
block editing if End date passed
### oneAnswerPerPerson
if exist on va dessus
existe par on génere si F5
else
### canModify
### canVote : false
- add action
- show voters count
- [ ] show voters list
- [ ] color action I voted
### canFund : false
* [X] costum.cms.fundMsg
* [X] add action
* [X] show funders count and ampount
* [ ] show funders list
### step rules
- any step can have rules to manage how it is shown
- required : is a path for a given value in the answer
```
rules.required : ["priorisation"]
or
"rules.required" : [
"answers.action.parents",
"answers.action.project"
]
```
- checkValue : is a path and a value
```
"rules" : {
"checkValue" : {
"priorisation" : [
"Passage en réunion de finalisation",
"Action validée"
]
}
}
```
### BUG affichage de la liste des contributeur
- [ ] color action I funded
- [ ] costum.form.fundPlan : 4400€
- [ ] equilibre Budget [[~d/modules/survey/views/custom/ctenat/resultsRow.php]]
- [X] costum.form.showAnswers
- [X] costum.form.params.calendar
- parameters needed to make this complexe input work
- [X] costum.form.params.sumColumns
- list of column to sumup and show in the answers list
## Text indenté
https://codimd.communecter.org/yWHBvYY_TUaVZE65Z9440g
Construisez votre formulaire dans un fichier texte en local et copier coller le en prod
Une fois que vous etes familier avec les formulaires
chaque input à une clef de correspondance ex input test [text] in put textarea [textarea]
### Liste des inputs
#### Nouvelle étape
```
- [step] Modèle Culturel
```
#### Input Text
> Taper un petit texte court
- `text pour placeholder`: on utilise le cote ``` ` ` ``` pour le texte dans l'input (placeholder)
- ``info``: on utilise double cote ``` `` `` ``` pour le notice en bas de l'input
```
- [text] Imaginaire, sources d'inspiration `saisir un texte` ``on peut saisir ce qu'on veut``
```
#### Input textarea
> Input pour remplir un grand texte éventuellement struturé en Markdown
```
- [textarea] Questions ouvertes
```
#### Input Nombre
> Input permet de saisir des nombres
```
- [number] Saisir un nombre
```
#### Input Email
> Input permet de saisir un adresse email
```
- [email] Saisir votre adresse email
```
#### Input Date
> Input permet de choisir une date
```
- [date] Séléctionner une date
```
#### Input Tag
> Input permet de saisir des tags
```
- [tag] Saisir des mots clés
```
#### Input radio
> Liste de choix unique
```
- [radioNew] Liste de choix unique
- Choix 1
- Choix 2
- Choix 3
```
#### Input Evaluation
> #todo
```
- [evaluation] Ceci est une evaluation
- Quadrant un
- Quadrant deux
- Quadrant trois
- Quadrant quatre
```
#### Input Checkbox
> Liste de Check box
```
- [checkboxNew] Quelles sont les valeurs qui sont au coeur de votre projet ?
- Open-source
- Collaboratif
- Peer-to-peer
- Bienveillance
- Autonomie
```
#### Input Checkbox avec ajouter Nouveau
> Liste de Check box, l'attribut permet de choisir plusieurs options et en ajouter plus d'information sur le choix qu'on a fait
```
- [multiCheckboxPlus] Vos objectifs
- [cplx] Court terme :
- [cplx] Moyen terme :
- [cplx] Long terme `placeholder` :
```
#### Input radio avec ajouter Nouveau
> Liste de radio bouton, l'attribut permet de choisir un seul options et en ajouter plus d'information sur le choix qu'on a fait
```
- [multiRadio] Vos objectifs
- [cplx] Court terme :
- [cplx] Moyen terme :
- [cplx] Long terme :
```
#### Input Address
> Input de Geolocalisation
```
- [address] Zone(s) géographique(s) d'action(s)
```
#### Input simpleTable
> C'est un tableau à deux entrées simple (basé sur des lignes et colonnes)
- [rows] : pour les lignes
- [columns] : pour les colonnes
- (nombre) : type de données pour les colonnes, et on a aussi le type (text)
- pour avoir plusieurs lignes, il suffit d'ajouter plusieurs [rows]
```
- [simpleTable] Quantités traitées
- [rows] Quantités traitées
- [columns] 2020 (nombre)
- [columns] 2021 (nombre)
- [columns] 2022 (nombre)
```
#### Input repondants
> C'est un tableau qui liste le noms et les prénoms des personnes qui ont complété le formulaire
```
- [repondants] Liste des répondants
```
### Exemple
Pour faire plusieurs étapes ajouter simplement plusieurs block step
```
- [section] Modèle Culturel
- [text] Nom de votre structure `saisir nom de votre structure` ``le nom de structure est composé des alphas numeriques``
- [text] Type de structure
- [radioNew] Est-ce qu’une conférence de presse commune serait utile ?
- Oui
- Non
- [checkboxNew] Types de déchet(s)
- Papier
- Electro-ménager
- Numérique
- Biodéchets
- [multiCheckboxPlus] Types d'action(s) réalisé(es)
- Assainissement
- Réparation (Recyclage)
- Revalorisation (Recyclage)
- Réutilisation (Recyclage
- Transformation (Recyclage)
- Ressourcerie (Recyclage)
- Compost (Recyclage)
- [cplx] Autres (Recyclage):
- [cplx] Autre(s) :
- [address] Zone(s) géographique(s) d'action(s)
- [multiCheckboxPlus] Types de déchet(s)
- Papier
- Electro-ménager
- Numérique
- Biodéchets
- [cplx] Autre(s) :
- [multiRadio] Types de déchet(s)
- Papier
- Electro-ménager
- Numérique
- Biodéchets
- [cplx] Autre(s) `A Préciser`:
- [simpleTable] Quantités traitées
- [rows] Quantités traitées
- [rows] Quantités ramassées
- [columns] 2020 (nombre)
- [columns] 2021 (nombre)
- [columns] 2022 (nombre)
- [columns] Commentaires (text)
- [textarea] Questions ouvertes
- [repondants] Liste des répondants
```